const queue = []
let state = true
const send = async () => {
    while (queue.length) {
        const msg = queue.shift()
        state = false
        await senMessage(msg)
        state = true
    }
}
const senMessage = (msg) => {
    return new Promise((res, rej) => {
        setTimeout(() => {
            console.log(msg)
            res()
        }, 1000)
    })
}

const pushMessage = (msg) => {
    queue.push(msg)
    if (state) send()
}
pushMessage(1)
pushMessage(2)
pushMessage(3)
setTimeout(() => {
    pushMessage(4)
}, 1 * 1000)